package com.wyf;

import com.wyf.exceptions.BusinessException;
import com.wyf.exceptions.ParamsException;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.ParameterMetaData;

/**
 * 全局异常统一处理方式二（推荐使用）
 *   实现Spring的异常处理接口HandlerExceptionResolver自定义自己的异常处理器
 */
//@Component // 将这个类交给IOC维护
public class GlobalExceptionResolver implements HandlerExceptionResolver {
    /**
     * 异常处理对象
     * @param httpServletRequest request请求对象
     * @param httpServletResponse response相应对象
     * @param handler 目标方法
     * @param e 异常对象
     * @return
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, Exception e) {
        // 得到ModelAndView对象，并设置默认视图
        ModelAndView error = new ModelAndView("error");
        error.addObject("ex", "默认的异常信息...");

        // 根据不同的异常，执行不同的处理
        if (e instanceof ParamsException) {
            ParamsException p = (ParamsException) e;
            p.setCode(500);
            p.setMsg("这是参数异常");
            // 设置视图
            error.setViewName("params_error");
            // 设置数据
            error.addObject("e", p);
            return error;
        } else if (e instanceof BusinessException) {
            BusinessException p = (BusinessException) e;
            p.setCode(500);
            p.setMsg("这是业务异常");
            // 设置视图
            error.setViewName("business_error");
            // 设置数据
            error.addObject("e", p);
            return error;
        }
        return error;
    }
}
